package com.googlecode.grs.robot;

import java.awt.geom.Point2D;

import com.googlecode.grs.environment.SimulationEnvironment;

/**
 * The Moveable interface describes a physical object in an environment which
 * moves, causing it to have a path(a set of points where this robot has been) A
 * SimulationEnvironment uses it to report robot position
 * 
 * @see SimulationEnvironment
 * @author ajc
 * 
 */
public interface Moveable {

	/**
	 * Returns the robots current x location
	 * 
	 * @return the robot's x component of its location
	 */
	public double getX();

	/**
	 * Returns the robots current y location
	 * 
	 * @return the robot's y component of its location
	 */
	public double getY();

	/**
	 * Returns the robots current 2D orientation
	 * 
	 * @return the robot's orientation (right = 0, ccw, units are radians)
	 */
	public double getHeading();

	/**
	 * Sets this Moveable Object's starting position and orientation
	 * 
	 * @deprecated use other
	 * @param x
	 *            starting x location
	 * @param y
	 *            starting y location
	 * @param angle
	 *            starting 2D orientation (right = 0, ccw, radians)
	 */
	public void setPosition(double x, double y, double angle);

	/**
	 * 
	 * Sets this Moveable Object's starting position and orientation
	 * 
	 * @deprecated not needed
	 * @param position
	 *            starting location
	 * @param angle
	 *            starting 2D orientation (right = 0, ccw, radians)
	 */
	public void setPosition(Point2D.Double position, double angle);
}
